home *** CD-ROM | disk | FTP | other *** search
- ***************************************************************************
- * *
- * THIS CODE PERFORMS ONLY THE FUNCTION OF THE (A0) MACRO EQUIVALENT!!! *
- * *
- * *****MC68000 AND MC68010 UNPROTECTED VERSION***** *
- * *
- * NO CHECKING IS DONE FOR ILLEGAL FORMAT ERRORS OR COPROCESSOR *
- * DETECTED EXCEPTIONS! *
- * *
- ***************************************************************************
-
- NUMREGS EQU 2 NUMBER OF SAVED REGISTERS
-
-
- MC68881 EQU $838000 ADDRESS OF MC68881
- OPERAND EQU $10 MC68881 OPERAND REGISTER
- COMMAND EQU $0A MC68881 COMMAND REGISTER
- RESPONSE EQU $00 MC68881 RESPONSE REGISTER
-
- * FLINE ENTERS HERE...
- FLINE MOVE.L A1,-(SP) SAVE A1
- MOVE.L D1,-(SP) SAVE D1
- MOVE.L NUMREGS*4+2(SP),A1 A1=USER PC
- MOVE.W (A1)+,D1 D1 = OPCODE WORD
- CMP.W #%1111001001000000,D1 ? CPID=1 AND GENERAL TYPE
- BHS NOTGEN BR IF NEITHER
-
- * GENERAL INSTRUCTION
- MOVE.W (A1)+,D1 D1 = CP COMMAND WORD
- MOVE.W D1,MC68881+COMMAND PASS TO '881
- FGENWAIT CMP.W #$8900,MC68881+RESPONSE ? IS 881 BUSY
- BEQ FGENWAIT LOOP IF SO TILL ITS READY
- ADD.W D1,D1 BREAK DOWN HIGH TWO BITS
- BCS GEN1XX BR SPECIAL MOVES
- BPL GEN00X BR REG-REG (MUST BE 000)
-
- ADD.W D1,D1 TST NEXT BIT
- BMI GEN011 BR REG-MEM
-
- * IS A MOVE IN GENERAL INSTRUCTION (INCLUDING FMOVECR)
- ROL.W #5,D1 SHIFT TYPE INTO WORD ACCESS POSITION
- AND.W #$000E,D1 ISOLATE JUST TYPE FIELD*2
- MOVE.W SIZETBL(D1.W),D1 OBTAIN SPECIAL TRANSFER SIZE CODE
- BMI.S GENTSPC BR IF IS NONE, BYTE, OR WORD
-
- * TRANSFER THE COUNT OF LONGWORDS
- MOVE.L A0,-(SP) SAVE USER'S A0
- GENTINL MOVE.L (A0)+,MC68881+DATA NEXT WORD IN
- DBRA D1,GENTINL LOOP TILL DONE
- MOVE.L (SP)+,A0 RESTORE SAVED REGISTER
- BRA FINI EXIT AS WE ARE DONE
-
- * SPECIAL COUNT OF NONE (FMOVECR), BYTE OR WORD
- GENTSPC ADD.B #2,D1 OFFSET TO -1,0,+1
- BMI.S GENTW BR WORD TRANSFER
- BNE.S FINI BR FMOVECR (NO TRANSFER)
-
- *MOVE BYTE IN
- MOVE.B (A0),MC68881+DATA STORE BYTE
- BRA FINI EXIT
-
- * MOVE WORD IN
- GENTW MOVE.W (A0),MC68881+DATA STORE WORD
- BRA FINI EXIT
-
- * SIZE TABLE - LONGWORDS TO COPY EXCEPT FOR NONE=-1 BYTE=-2 WORD=-3
- SIZETBL DC.W 0 .L
- DC.W 0 .S
- DC.W 2 .X
- DC.W 2 .P
- DC.W -3 .W
- DC.W 1 .D
- DC.W -2 .B
- DC.W -1 FMOVECR (NONE)
-
- * UPDATE PC AND RETURN TO CALLER
- FINI MOVE.L A1,NUMREGS*4+2(SP) SAVE SCAN PC
- MOVE.L (SP)+,D1 RESTORE WORK
- MOVE.L (SP)+,A1 REGISTERS
- RTE RETURN TO INVOKER
-
- * UNEXAMPLED CODE HANDLES
- GEN011 EQU *
- GEN00X EQU *
- GEN1XX EQU *
- NOTGEN EQU *
-
- END
-